﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace hse_2013_database
{
    public class FileDataProvider:IDataProvider
    {
        /// <summary>
        /// Массив с книгами
        /// </summary>
        List<Book> books=new List<Book>();
        public FileDataProvider()
        {
            //Потоки для считывания данных
            FileStream fs = new FileStream("../Books.txt", FileMode.Open);
            StreamReader sr = new StreamReader(fs, Encoding.Default);
            //Считывание книг
            try
            {
                string[] str = new string[6];
                
                char[] ch = { ';' };
                while (!sr.EndOfStream)
                {
                    str = sr.ReadLine().Split(ch, StringSplitOptions.RemoveEmptyEntries);
                    books.Add(new Book(str[0], str[1], uint.Parse(str[2]), uint.Parse(str[3]), str[4], str[5]));

                }
                
            }
            catch { }
            sr.Close();
            fs.Close();
        }
        /// <summary>
        /// Метод возвращающий массив с книгами
        /// </summary>
        /// <returns></returns>
        public List<Book> getBooks()
        {
            return books;
        }
        /// <summary>
        /// Добавление книги
        /// </summary>
        /// <param name="b"></param>
        public void Add(Book b)
        {
            books.Add(b);
        }
        /// <summary>
        /// Удаление книги
        /// </summary>
        /// <param name="index"></param>
        public void Delete(int index)
        {
            books.RemoveAt(index);
        }
        /// <summary>
        /// Сохранение книг
        /// </summary>
        public void Safe()
        {
            FileStream fs = new FileStream("../Books.txt", FileMode.Create);//создание неоходимых потоков для сохранения
            StreamWriter sw = new StreamWriter(fs, Encoding.Default);
            for (int i = 0; i < books.Count; i++)
            {   //поэлементная запись в файл
                sw.WriteLine(books[i].Info());
            }
            sw.Close();//закрытие потоков
            fs.Close();
            
        }
        /// <summary>
        /// Удаление всех книг
        /// </summary>
        public void DeleteAll()
        {
            books.Clear();
        }
        /// <summary>
        /// Смена массивов книг
        /// </summary>
        /// <param name="list"></param>
        public void ChangeList(List<Book> list)
        {
            this.books = list;
        }
    }
}
